#include <QtWidgets>
#include <QDebug>
#include "cg_tapis.h"
#include "cg_autre.h"

Cg_Tapis::Cg_Tapis() : dragOver(false), m_numeroJoueur(0), m_tailleTapis(0)
{
    setAcceptDrops(true);
}

void Cg_Tapis::dragEnterEvent(QGraphicsSceneDragDropEvent *event)
{
    if (event->mimeData()->hasImage())
    {
        event->setAccepted(true);
        dragOver = true;
        update();
    }
    else
    {
        event->setAccepted(false);
    }
}

void Cg_Tapis::dragLeaveEvent(QGraphicsSceneDragDropEvent *event)
{
    Q_UNUSED(event);
    dragOver = false;
    update();
}

void Cg_Tapis::dropEvent(QGraphicsSceneDragDropEvent *event)
{
    unsigned int i = 0;
    QPixmap rien;
    dragOver = false;
    m_tapis[m_tailleTapis] = qvariant_cast<QPixmap>(event->mimeData()->imageData());
    for (i = m_tailleTapis + 1 ; i < 5 ; i++)
    {
        m_tapis[i] = rien;
    }
    m_tailleTapis++;
    setCursor(Qt::ArrowCursor);
    update();
}

QRectF Cg_Tapis::boundingRect() const
{
    return QRectF(520, 450, 860, 300);
}

void Cg_Tapis::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget)
{
    qDebug()<<"Paint - Tapis\n";
    Q_UNUSED(option);
    Q_UNUSED(widget);
    painter->drawPixmap(QPointF(538,465), m_tapis[0]);
    painter->drawPixmap(QPointF(538+170,465), m_tapis[1]);
    painter->drawPixmap(QPointF(538+340,465), m_tapis[2]);
    painter->drawPixmap(QPointF(538+510,465), m_tapis[3]);
    painter->drawPixmap(QPointF(538+680,465), m_tapis[4]);
}

void Cg_Tapis::effacerTapis()
{
    unsigned i = 0;
    QPixmap rien;
    for (i = 0 ; i < 5 ; i++)
    {
        m_tapis[i] = rien;
    }
    m_tailleTapis = 0;
    update();
}

void Cg_Tapis::carte_jouee(unsigned int joueur, Carte carte)
{
    qDebug() << "carte_jouee - Cg_Tapis\n";
    if ((joueur != m_numeroJoueur) && (carte.numero() != 78))
    {
        QPixmap carteJouee;
        carteJouee.load(creerChemin(carte.numero()));
        m_tapis[m_tailleTapis] = carteJouee;
        m_tailleTapis++;
    }
    update();
}

void Cg_Tapis::numero_change(unsigned int n)
{
    m_numeroJoueur = n;
    update();
}

void Cg_Tapis::requete_refusee(Carte posee)
{
    Q_UNUSED(posee);
    QPixmap rien;
    m_tailleTapis--;
    m_tapis[m_tailleTapis] = rien;
    update();
}

void Cg_Tapis::adversaires(std::vector<std::string> noms)
{
    Q_UNUSED(noms)
    effacerTapis();
    m_tailleTapis = 1;
    QPixmap carte1(":/images/Dos de Carte (Govi) 2.png");
    m_tapis[1] = carte1;
    m_tapis[2] = carte1;
    m_tapis[3] = carte1;
    update();
}

void Cg_Tapis::pli_termine(unsigned int joueur)
{
    Q_UNUSED(joueur)
    QVector<QPixmap> pli;
    unsigned int i = 0;
    for (i = 0 ; i < 5 ; i++)
    {
        pli.push_back(m_tapis[i]);
    }
    emit dernierPli(pli);
    effacerTapis();
}

void Cg_Tapis::chien(Carte c1, Carte c2, Carte c3)
{
    m_tapis[1] = QPixmap(creerChemin(c1.numero()));
    m_tapis[2] = QPixmap(creerChemin(c2.numero()));
    m_tapis[3] = QPixmap(creerChemin(c3.numero()));
    m_tailleTapis = 1;
    update();
}

void Cg_Tapis::contrat_final(Enchere e)
{
    Q_UNUSED(e)
    effacerTapis();
}
void Cg_Tapis::ecart_accepte(std::vector<Carte> ecart)
{
    Q_UNUSED(ecart)
    effacerTapis();
}


